Skip to content

[pull] master from mattermost:master - #867

Merged
pull[bot] merged 6 commits into
code:masterfrom
mattermost:master
Jul 27, 2026
Merged

[pull] master from mattermost:master#867
pull[bot] merged 6 commits into
code:masterfrom
mattermost:master

Conversation

@pull

@pull pull Bot commented Jul 27, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

esarafianou and others added 6 commits July 27, 2026 12:40
…n images, table wrapping, oversized icons) (#37669)

* Fix leftover RST/malformed MDX admonition syntax

Docusaurus/MDX admonitions use `:::type[Title]` for a custom title, not
the old Sphinx `.. type::` RST directive or a bare `:::type Title` (which
Docusaurus renders as a type with the literal text "Title" appended, not
a real title). Fixed 12 files using the malformed `:::type Title` form,
plus two leftover `.. image::` RST directives (converted to `<img>` tags,
covered in the images commit's file but noted here since it's the same
admonition-adjacent cleanup pass) in manage-your-security-preferences.mdx.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix broken images: port missing screenshots from legacy docs repo

26 files referenced screenshots/diagrams via relative paths (`../images/x`,
`../../images/x`) that don't resolve anywhere in this repo — the assets
were never migrated during the Sphinx-to-Docusaurus conversion, and in
one file (ad-ldap-groups-synchronization.mdx) the filenames were also
corrupted with a leftover `%0A` (encoded newline) prefix from the
conversion.

Ported the 46 missing image files from mattermost/docs (source/images/)
into docs/site/static/images/ — the location every other working image
reference in this repo already resolves against — and rewrote every
relative reference to the root-absolute `/images/<file>` form used
elsewhere in these same files (e.g. server-logout-indicator.png).

Verified via a full scan: all 680 `/images/...` references across
docs/main now resolve to a real file on disk.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix oversized/broken checkmark icons in EMM config table

The EMM configuration reference table used bare <img src="../../_static/images/check-circle-green.svg" /> for ~24 "supported" checkmarks — a legacy Sphinx path that doesn't exist in this repo (broken image) and, with no explicit size, would render at native SVG size rather than as a small inline checkmark (oversized icon). Replaced with the actual migrated asset (/img/ui/checkmark.svg) plus explicit width/height and alt text.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix wide comparison table wrapping on the plans page

The plans/pricing table (7 columns: Feature Category + 5 editions +
Available From) had no table-layout or column-width rules, so the
first ("Feature Category") column — which holds long, wrapping prose —
ended up roughly the same rendered width as the edition columns, which
only ever hold a short checkmark or version string. That forced every
row onto several wrapped lines. Added `table-layout: fixed` with
explicit per-column widths (28% category / 10% per edition / 22% for
"Available From") so the category column gets the space it needs.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix images broken on non-root baseUrl deployments (PR previews)

Docusaurus only rewrites image URLs for the site's baseUrl when using
markdown image syntax (`![alt](/images/x.png)`) — that gets compiled to
a webpack require() call. A raw HTML `<img src="/images/x.png" />` tag
is left as a literal string, which the browser resolves from the domain
root, ignoring baseUrl entirely.

On production baseUrl is "/", so this silently worked by coincidence.
But PR preview builds set BASE_URL to "/mattermost/pr-<N>/"
(.github/workflows/docs-preview-template.yml), so every raw <img
src="/images/..."> or src="/img/..."> 404s specifically on preview
deployments — which is why images added/fixed earlier in this branch
still showed as broken in the PR's docs preview.

This is a pre-existing, repo-wide pattern (503 raw <img> tags across
103 files, most untouched by this PR otherwise) rather than something
introduced by earlier commits here — those commits just added a few
more instances of an existing broken pattern. Fixed all of them by
importing @docusaurus/useBaseUrl and wrapping src={useBaseUrl('/images/...')}
so the URL is correctly rewritten for whatever baseUrl the site is
built with.

Verified: all 503 useBaseUrl(...) calls resolve to a real file under
docs/site/static, and every modified file was checked with @mdx-js/mdx
compile() to confirm no syntax breakage from the added import
statements.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix leftover RST list/table markup in notifications docs

- mobile-troubleshooting.mdx: replace leading blockquote markers (>)
  under step 3 with list-content indentation so the nested numbered
  substeps and screenshots render as part of the ordered list instead
  of a blockquote.
- manage-your-notifications.mdx: replace the mangled blockquote/dl
  header row (with literal RST separator runs and stray | and +
  characters) with a proper <thead><th scope="col"> row, and restore
  the "Icon badge (dot)" row as a normal <tbody> row.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Rebuild mangled security preferences table from RST source

Cross-checked against the legacy RST source to reconstruct the table
correctly: proper <thead>/<th scope="col"> header, real ordered/
unordered lists instead of pipe-joined literal text, working internal
links in place of unresolved mm-ref: URIs, and a <Note> block for the
sign-in method callout (previously rendered as literal ".. note::"
text). Also dropped a stray phantom third table column left over from
conversion.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix typos and remaining markup issues in collaborate/notifications docs

- message-priority.mdx: fix "acknowlegement" typo, add missing "the"
  before "message" in the acknowledgement description.
- organize-conversations.mdx: split the Tip's two bullets onto
  separate lines and drop the escaped leading hyphen that was
  preventing the first item from rendering as a list.
- organize-using-custom-user-groups.mdx: fix "preferreed" typo and
  add missing "to" in the archived-group restoration instructions.
- schedule-messages.mdx: fix "dislays" typo.
- manage-your-notifications.mdx: replace the leftover dl/dt/dd/
  line-block markup in the Push notifications row with a plain anchor
  link, matching the Web/Desktop cells elsewhere in the table.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
…#37673)

* docs: fix broken mm-ref:/mm-doc: placeholder links from RST migration

During the Sphinx/RST-to-Docusaurus/MDX conversion, every RST :ref: and
:doc: cross-reference role was converted into a dead link using a
made-up, non-functional URI scheme (mm-ref:/mm-doc:) instead of a real
path, leaving ~228 broken links across ~20 docs/main files.

Decode each payload and resolve it to a working relative link, computing
the target heading's anchor slug (via github-slugger, matching
Docusaurus's own heading-id algorithm) where the original :ref: pointed
at a specific section. A few links with no confidently matching target
are marked with a TODO comment for follow-up.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Resolve remaining ESR link TODOs and rebuild mangled version table

The three mm-ref: TODOs left by the previous pass pointed at RST
:ref: labels (release-v9-11-extended-support-release, etc.) that
exist as real headings in unsupported-legacy-releases.mdx and
mattermost-v10-changelog.mdx, not in release-policy.mdx. Resolved
them to the correct anchors.

While fixing the links, also rebuilt the surrounding table: it was
the same blockquote/dl/dt-with-literal-RST-separators artifact seen
elsewhere in the RST-to-MDX migration, plus a phantom 4th table
column. Cross-checked against the legacy RST source
(server-deployment-planning.rst) to confirm it's really 3 columns.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix anchor over-extension and truncated RST fragments in table cells

- authentication-configuration-settings.mdx / site-configuration-
  settings.mdx: the migrated doc links wrapped far more text than
  intended ("multi-factor authentication (MFA) | - System Config
  path: ..." / "threaded discussions | - System Config path: ...").
  Closed the anchor immediately after the link label so the System
  Config path text renders as plain text outside the link, matching
  the pattern used elsewhere in these tables.
- client-availability.mdx: three table cells (Preview image links,
  Join existing team, Create a new team) retained truncated RST
  :ref: label fragments ("ments>`__", "eam>`__", "team>`__") left
  over from the conversion. Removed them - the checkmark cells
  already carry the correct support indicators, cross-checked against
  the legacy RST source table.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix stray absolute doc link and leaked table separators

- important-upgrade-notes.mdx: the first Compliance Export doc link in
  the v10.5 row pointed at the absolute docs.mattermost.com/*.html URL
  instead of the site-relative canonical path (the second link in the
  same cell already used the correct path).
- client-availability.mdx: 15 feature-name links across the Messages,
  Channels, Teams, Playbooks, Calls, Authentication, and Other tables
  had leftover RST table-separator artifacts ("| | | |") bleeding into
  the anchor text. Removed them so the link boundary matches the
  correctly-converted rows elsewhere in the same tables.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
…om legacy source (#37674)

* Remove unreviewed IA-redesign content, restructure air-gapped docs from legacy source

The docs-experimental -> monorepo migration (#37330) brought in draft
scaffolding from a proposed IA redesign that was never reviewed and has
no basis in the legacy Sphinx docs or the actual product. This removes
it and, where a real legacy page existed, rebuilds the content from
that source instead.

Removed (no legacy-docs equivalent, entirely speculative):
- administration-guide/upgrade/upgrade-v11.mdx - a per-major-version
  upgrade guide "stub" with literal placeholder text
  ("*Per-release, version-specific procedure authored by
  release-management team.*"); this per-version guide concept never
  existed in the old docs.
- deployment-guide/air-gapped-operations/offline-license-activation.mdx
  - fabricated procedure and config-setting claims with no legacy
  source and no verification against the product.
- security-guide/compliance-frameworks/fedramp-moderate.mdx - a live
  "in-process" FedRAMP authorization badge and NIST 800-53 control
  mapping table that was never reviewed or signed off by compliance/
  legal.

Restructured from the legacy air-gapped-deployment.rst content (real,
previously-published guidance, just reorganized into smaller pages):
- air-gapped-operations/index.mdx - high-level overview, dropped the
  invented "Persona scope" note, "Roadmap (Phase 2)" section, and
  unverified deployment contexts (DoD SIPRNet/JWICS, sovereign-cloud,
  tactical-edge/DDIL) that had no basis in the legacy docs.
- air-gapped-operations/quick-start-runbook.mdx - replaced the
  fabricated (and off-by-one) "12 steps" with the legacy RST's actual
  6-step deployment overview.
- air-gapped-operations/mirror-package-repositories.mdx - replaced
  invented artifact/registry guidance with the legacy Bill of
  Materials, Plugins, SSL/TLS, and registry-mirroring setup content.
- air-gapped-operations/disable-phone-home-features.mdx - replaced the
  invented "phone-home inventory" table (unverified config.json key
  names) with the legacy doc's actual per-feature configuration
  guidance (push notifications, email, link previews, GIF picker,
  notices, telemetry).

Also fixed every cross-reference broken by the above (persona landing
pages under for/, the compliance-frameworks index, DISA STIG and DoD
IL4/IL5 pages, and a few deployment-guide pages that linked to the
removed/renamed content).

The broader for/ persona-landing-page tree and the DISA STIG / DoD
IL4-5 compliance pages still reference the same unreviewed IA redesign
and need a follow-up pass, but are out of scope for this change.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Soften DISA STIG customer-responsibility wording on DoD IL4/IL5 link

"Validated configuration guidance" overstated what the linked DoD
IL4/IL5 page actually provides (a documented control mapping, not a
third-party-validated one). Matches the "documents the gap honestly"
framing already used elsewhere on these compliance pages.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
… signal (#37666)

* Remove/restyle "vibe coded" yellow left-border signal on docs cards/blocks

Nick Misasi flagged in the "Docs Revamp - Feedback" channel (2026-07-22/23):

  "Docs look great! Left border like this is a pretty common 'vibe coder'
  signal. Wonder if we should just remove it? I see the yellow left border
  in a few other places too. Regardless of whether its AI built or not, I
  don't know if that signal is the first thing we want a reader to see"

tokens.css already documents --mm-color-marigold as "accent — CTAs only,
used sparingly", so this restores that contract: marigold left borders on
static, non-CTA content blocks/cards are replaced with the site's primary
denim brand color, while genuinely deliberate marigold accents (navbar
underline, CTA pill, section rule, h2 rule accent, copy-button hover) are
left untouched.

- CardGrid: removed the always-on marigold left border from the card grid
  (the "For Administrators"/"For Developers" cards from the screenshot);
  hover state now uses a neutral border-strong color instead of marigold.
- PlanAvailability: .plan badge left border marigold -> denim, matching
  the Edition/Deployment/Attestation badge family.
- EditionAvailability: dropped the marigold .edition variant override so
  Edition and Deployment badges share the same denim left edge.
- IMEDiagram: intro-panel (Application/Integration/Deployment) left border
  and icon color marigold -> denim, with a lighter denim tint in dark mode.
- DeploymentArchitectureBuilder: .miniFlow/.flow protocol chips left
  border marigold -> denim (the per-role box legend, which uses marigold
  as one of several deliberate type colors, is left unchanged).
- custom.css: blockquote left border marigold -> border-strong (neutral),
  since it applied unconditionally to every blockquote site-wide.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Restyle CardGrid nav cards after removing marigold left border

Replace the flat left-border accent with elevation cues (rounded
corners, resting/hover shadow, background tint on hover, and a
circular arrow/icon affordance) so cards still read as clickable
without the decorative bar. Fix dark-mode card surface, which was
hardcoded to a navy shade nearly identical to the page background.

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix invisible dark-mode left border on Plan/Edition badges

border-left-color was still hardcoded to the dark denim brand color
in [data-theme='dark'], blending into the near-black background.
Add the lighter --mm-denim-300 override used elsewhere on this
branch (IMEDiagram, DeploymentArchitectureBuilder).

Co-authored-by: Cursor <cursoragent@cursor.com>

* Fix low-contrast focus ring and inaccurate marigold-usage comment

- CardGrid: marigold focus outline was ~1.7:1 against the white card
  surface, under the 3:1 WCAG 1.4.11 minimum. Switch to denim, with
  a lighter dark-mode override.
- IMEDiagram: reword the marigold usage comment to match tokens.css's
  actual contract ("CTAs only, used sparingly") instead of the
  narrower and incorrect "interactive/hover states only" framing.

Co-authored-by: Cursor <cursoragent@cursor.com>

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
When editing an existing post, the shared AdvancedTextEditor reused the
same draft-save pipeline as the composer. On unmount / beforeunload it
called updateDraft with show:true and server sync, which created a real
channel/thread draft via the drafts API. That draft came back over the
websocket and surfaced in the drafts UI.

Guard handleDraftChange so that in edit mode the edit content is only
persisted locally (never flagged show:true, never upserted to the
server).

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Ibrahim Serdar Acikgoz <isacikgoz@users.noreply.github.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
…37642)

* Fix image preview opening when clicking outside the image in a post

* e2e test

---------

Co-authored-by: Nevyana Angelova <nevyangelova@Nevy-Macbook-16-2025.local>
Co-authored-by: Mattermost Build <build@mattermost.com>
@pull pull Bot locked and limited conversation to collaborators Jul 27, 2026
@pull pull Bot added the ⤵️ pull label Jul 27, 2026
@pull
pull Bot merged commit d73adf5 into code:master Jul 27, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants